package com.bnz.utils;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 时间工具类
 */
public class MyDate {

    public static void main(String[] args) {
        List<Date> dateMenus = getDateMenus();
        // SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
        // for (Date date : dateMenus) {
        //     String format = sdf.format(date);
        //     System.out.println( format);
        // }
        for (Date dateMenu : dateMenus) {
            System.out.println(dateMenu.toLocaleString());
        }
        // Date dt = new Date();
        // Date date = MyDate.addDateHour(dt, 2);
        // System.out.println("date = " + date);
        // System.out.println("dt = " + dt);
    }

    /**
     * 功能: 将指定的日期转换为:yyyyMMddHH这种格式串输出
     * 参数:
     * 返回值:
     * 时间: 2021/8/18 15:39
     */
    public static String getDateStr(Date date){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH");
        return sdf.format(date);
    }
    /***
     * 获取时间菜单
     * @return
     */
    public static List<Date> getDateMenus(){
        //定义一个List<Date>集合，存储所有时间段
        List<Date> dates = getDates(12);
        //判断当前时间属于哪个时间范围
        Date now = new Date();
        for (Date cdate : dates) {
            //开始时间<=当前时间<开始时间+2小时
            if(now.getTime() >= cdate.getTime()  && now.getTime()< addDateHour(cdate,2).getTime()){
                now = cdate;
                break;
            }
        }
        //当前需要显示的时间菜单
        List<Date> dateMenus = new ArrayList<>();
        for (int i = 0; i < 5 ; i++) {
            dateMenus.add(addDateHour(now,i*2));
        }
        return dateMenus;
    }

    /***
     * 指定时间往后N个时间间隔
     * @param hours
     * @return
     */
    public static List<Date> getDates(int hours) {
        List<Date> dates = new ArrayList<>();
        //循环12次
        Date date = toDayStartHour(new Date()); //凌晨
        for (int i = 0; i <hours ; i++) {
            //每次递增2小时,将每次递增的时间存入到List<Date>集合中
            dates.add(addDateHour(date,i*2));
        }
        return dates;
    }

    /**
     * 功能: 给指定日期添加指定的小时数
     * 参数:
     * 返回值: java.util.Date
     * 时间: 2021/8/18 15:27
     */
    public static Date addDateHour(Date date, int hour) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR_OF_DAY,hour);
        return calendar.getTime();
    }


    /**
     * 功能: 将传入的日期设置为00：00：00
     * 参数:
     * 返回值: java.util.Date
     * 时间: 2021/8/18 15:24
     */
    public static Date toDayStartHour(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY,0);
        calendar.set(Calendar.MINUTE,0);
        calendar.set(Calendar.SECOND,0);
        return calendar.getTime();
    }
}
